package com.chigga.common.core.controller;

import com.chigga.common.core.domain.PageQuery;
import com.chigga.common.core.domain.ResponseResult;

/**
 * 基础控制器
 *
 * @author DefChigga
 */
public class BaseController {
    /**
     * 创建分页查询参数
     *
     * @param pageNum  页码
     * @param pageSize 每页大小
     * @param queryDTO 查询参数
     * @param <T>      泛型类型
     * @return 分页查询对象
     */
    protected <T> PageQuery<T> createPageQuery(Integer pageNum, Integer pageSize, T queryDTO) {
        // 参数校验
        if (pageNum == null || pageNum <= 0) {
            throw new IllegalArgumentException("页码必须为正整数");
        }
        if (pageSize == null || pageSize <= 0) {
            throw new IllegalArgumentException("每页大小必须为正整数");
        }
        // 创建分页查询对象
        PageQuery<T> pageQuery = new PageQuery<>();
        pageQuery.setPageNum(pageNum);
        pageQuery.setPageSize(pageSize);
        pageQuery.setParams(queryDTO);
        return pageQuery;
    }

    /**
     * 创建响应结果
     *
     * @param row 影响行数
     * @return 响应结果
     */
    protected ResponseResult<Integer> createResponseResult(Integer row) {
        if (row == null || row == 0) {
            return ResponseResult.failureCreated(row);
        }
        return ResponseResult.successCreated(row);
    }

    /**
     * 创建响应结果
     *
     * @param row 影响行数
     * @param message 响应消息
     * @return 响应结果
     */
    protected ResponseResult<Integer> createResponseResult(Integer row, String message) {
        if (row == null || row == 0) {
            return ResponseResult.failureCreated(row, message + "失败");
        }
        return ResponseResult.successCreated(row, message + "成功");
    }

    /**
     * 删除响应结果
     *
     * @param row 影响行数
     * @return 响应结果
     */
    protected ResponseResult<Integer> deleteResponseResult(Integer row) {
        if (row == null || row == 0) {
            return ResponseResult.failureDeleted(row);
        }
        return ResponseResult.successDeleted(row);
    }

    /**
     * 更新响应结果
     *
     * @param row 影响行数
     * @return 响应结果
     */
    protected ResponseResult<Integer> updateResponseResult(Integer row) {
        if (row == null || row == 0) {
            return ResponseResult.failureUpdated(row);
        }
        return ResponseResult.successUpdated(row);
    }

    /**
     * 查询响应结果
     *
     * @param data 查询结果
     * @param <T>  泛型类型
     * @return 响应结果
     */
    protected <T> ResponseResult<T> selectResponseResult(T data) {
        if (data != null) {
            return ResponseResult.successSelected(data);
        }
        return ResponseResult.failureSelected();
    }
}
